SQLFluff 是一個開源的 SQL 語法檢查和格式化工具(Linter),主要是確保 SQL 語法遵循特定樣式規範,團隊開發過程中才能保有內部的一致性,除了開發維護上可以更快速,也能避免語法錯誤。
dbt 官方建議也是建議使用 SQLFluff
來檢查樣式
$ git clone https://github.com/snhou/astronomer-cosmos-poc.git
$ cd /astronomer-cosmos-poc
中間可以開虛擬環境和執行 docker 容器,可以參考 【Day 17】用 Astronomer Cosmos 結合 dbt 和 Airflow - 再戰 Jaffle Shop
$ pip install sqlfluff sqlfluff-templater-dbt
$ sqlfluff version
.sqlfluff
可以先參考官方提供的範例來修改,下方只有留一些當作範例。
[sqlfluff]
dialect = postgres
templater = dbt # 使用 dbt 作為模板
max_line_length = 80 # 每行最大字符數限制為 80
indent_unit = space # 使用空格作為縮排單位
[sqlfluff:indentation]
tab_space_size = 4 # 設定縮排為 4 個空格
[sqlfluff:layout:type:comma]
spacing_before = touch # 逗號前不留空格
line_position = trailing # 逗號放在行尾
[sqlfluff:rules:capitalisation.keywords]
capitalisation_policy = upper # 關鍵字使用大寫
[sqlfluff:rules:aliasing.column]
aliasing = explicit # 明確欄位別名
實際使用的時候記得刪除註解喔~
全部有哪些規則可以設定,可以參考官方文件的規則說明
$ cd /dbt/jaffle_shop
$ sqlfluff lint models/staging/stg_payments.sql
這裡可以看到基本上都是提到大小寫的問題, sql 大小寫都可以,這裡只是示範設定和 lint 而已~
$ sqlfluff fix models/staging/stg_payments.sql
執行完就可以看到 FIXED
的字樣了
.sqlfluffignore
就像是 .gitignore
一樣,可以設定執行過程中,什麼檔案和資料夾內不要執行
temp/
testing.sql
在 vscode 當中要自動偵測的話,記得要來設定這邊新增執行路徑
也可以直接從 setting.json
設定或是直接裝別人的設定